刷題是練習解決問題的能力的一種方法,而這裡的「問題」主要是指演算法問題。但在實務的工作場景當中,「演算法問題」只是程式工作的一小部分而已。我們除了在意「一個問題中的算法怎麼解之外」,我們更在意的「如何把這些算法實現成完整的應用」。因此除了刷題之外的事是如何用「工程化」的方式解決一個真實問題,除了刷題之外想寫好程式還有以下幾個技能需要掌握:
從「可以動」的程式碼到「寫得漂亮」的程式碼,是我們第一階段從 LeetCode 刷題的持續鍛鍊的程式開發基礎功。這些一段一段的程式碼就像樂高積木一樣,每一個程式碼片段都有各自可以解決的問題與功能。透過設計模式與軟體工程的經驗,我們知道如何把這些程式碼片段組裝成完整的專案,用於解決一個大型的問題。不過開發過程中,需求無限但人力時間有限,因此如何在正確的時間要求下將投入資源效益最大化是透過軟體專案管理教我們的事。最後一段想要延伸的進議題是「系統架構(System Architecture)」,讓我們繼續看下去。
在介紹系統架構的重要性之前,你可以先思考當一個專案 部署上線 之後可能會隨之成長,例如:
你覺得這樣的成長對於「程式功能」與「軟體開發」會產生怎樣的影響嗎?
先講結論,其實在系統成長的過程中功能是差不多的,像是 10 個人使用的留言板跟 100 個人用留言板功能本身應該差不多。但是「功能背後的程式」可能就會有巨大的改變,為了滿足 10 個人使用跟維持 100 個人使用需要的資源絕對不是同一個量級的。換句話說,這其實一種從程式能動就好的世界到沒那麼簡單的世界的升級;用專業術語來說就是從 Prototype 到 Production。
接著,我們回到上述的問題的解法 - 「系統架構(System Architecture)」。系統架構會將一個系統用模組化 (Module)與元件(Component)的概念,將原系統拆成小的單元再進行組合與拼裝。系統架構是軟體專案中的一個進階議題,目的在於如何讓程式專案能夠更彈性的應用於不同的量級。對於系統架構,會在意以下幾個點:
實務上系統架構有很多中實現的方式,例如「主從式架構」、「三層式架構」或是「分散式架構」等等,能夠將系統拆解成不同的關注點或是自動化的彈性擴充。
嗨,大家好!我是維元,一名擅長網站開發與資料科學的雙棲工程師,斜槓於程式社群【JSDC】核心成員及【資料科學家的工作日常】粉專經營。目前在 ALPHACamp 擔任資料工程師,同時也在中華電信、工研院與多所學校等單位持續開課。擁有多次大型技術會議講者與競賽獲獎經驗,持續在不同的平台發表對 #資料科學、 #網頁開發 或 #軟體職涯 相關的分享,邀請你加入 訂閱 接收最新資訊。